package Demo08.Demo0828;

import javax.annotation.processing.SupportedSourceVersion;
import java.util.Arrays;
import java.util.Scanner;

public class NiuKe {

    public static void main(String[] args) {
        //用筛选法求n以内的素数。筛选法求解过程为：将2~n之间的正整数放在数组内存储，将数组中2之后的所有能被2整除的数清0，
        //再将3之后的所有能被3整除的数清0 ，以此类推，直到n为止。数组中不为0 的数即为素数。
        //多组输入，每行输入一个正整数（不大于100）。
        //输出描述：
        //针对每行输入的整数n，输出两行，第一行，输出n之内（包括n）的素数，用空格分隔，
        //第二行，输出数组中2之后0 的个数。每行输出后换行。
        //输入：
        //20
        //输出：
        //2 3 5 7 11 13 17 19
        //11
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int a = sc.nextInt();//根据输入边界求数组长度
            int[] b = new int[a - 1];
            for (int i = 0; i < b.length; i++) {//从下标0赋值2开始
                b[i] = i + 2;
            }
            for (int i = 2; i < a; i++) {//对于1 ~ a之间的数字进行遍历，求出质数
                for (int j = 0; j < b.length ;j++){//对于数组进行循环，求出最后的质数
                    if(i != b[j]  && b[j] % i == 0){
                        b[j] = 0;
                    }
                }
            }
            int count = 0;
            for (int i = 0; i < b.length; i++) {
                if(b[i] != 0){
                    System.out.print(b[i] + " ");
                }else{
                    count++;
                }
            }
            System.out.println();
            System.out.println(count);
        }
    }//BC78 筛选法求素数
    public static void main3(String[] args) {
        //有一个有序数字序列，从小到大排序，将一个新输入的数插入到序列中，保证插入新数后，序列仍然是升序。
        //第一行输入一个整数(0≤N≤50)。
        //第二行输入N个升序排列的整数，输入用空格分隔的N个整数。
        //第三行输入想要进行插入的一个整数。
        //输出为一行，N+1个有序排列的整数。
        //输入：
        //5
        //1 6 9 22 30
        //8
        //输出：
        //1 6 8 9 22 30
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int[] b = new int[a + 1];//数组长度是上面输入数字 + 1，因为后面要进行插入
        while(sc.hasNext()) {//while()循环保证多组输入
            for (int i = 0; i < a; i++) { //for循环对于数组前面的数字进行赋值
                b[i] = sc.nextInt();
            }
            int c = sc.nextInt(); //对想要插入的数字进行输入
            if (a > 1) {
                int key = fac(b, c);//找这个插入的临界条件
                for (int i = b.length - 1; i > key + 1; i--) {
                    b[i] = b[i - 1];//将key这个临界条件后面的数组统统往后挪了一位
                }
                b[key + 1] = c;//然后将咋们想要进行插入的数字插入key的后面
                for (int i = 0; i < b.length; i++) {
                    System.out.print(b[i] + " ");
                }
            }else if(a == 1){//如果只有一个数字的话，那么上面就会越界，所以这里特殊处理
                if(c > b[0]){
                    b[1] = c;
                }else{
                    b[1] = b[0];
                    b[0] = c;
                }
                for (int i = 0; i < b.length; i++) {
                    System.out.print(b[i] + " ");
                }
            }
        }
    }//BC77 有序序列插入一个数
    public static int fac(int[] a,int key){
        for (int i = 0; i < a.length - 1; i++) {
            if(a[i] <= key && (a[i + 1] >= key  || a[i + 1] == 0)){
                return i;
            }
        }
        return -1;
    }//这里其实就是数组里面那个g增删问题的增，自己实现了，牛逼~

    public static void main2(String[] args) {
        //公务员面试现场打分。有7位考官，从键盘输入若干组成绩，每组7个分数（百分制），去掉一个最高分和一个最低分，输出每组的平均成绩。
        //输入描述：
        //一行，输入7个整数（0~100），代表7个成绩，用空格分隔。
        //输出描述：
        //一行，输出去掉最高分和最低分的平均成绩，小数点后保留2位，每行输出后换行。
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int[] a =  new int[7];
            for (int i = 0; i < 7; i++) {
                a[i] = sc.nextInt();
            }
            Bubble(a);
            int res = 0;
            for (int i = 1; i < a.length - 1; i++) {
                res += a[i];
            }
            System.out.printf("%.2f\n",res / 5.0);
        }
        sc.close();
    }//BC76 公务员面试

    public static void Bubble(int[] a){
        for (int i = a.length - 1; i >= 1; i--) {
            for (int j = 0; j < i; j++) {
                if(a[j] > a[j + 1]){
                    int tmp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = tmp;
                }
            }
        }
    }
    public static void main1(String[] args) {
        //KiKi学习了循环，BoBo老师给他出了一系列打印图案的练习，该任务是打印用数字组成的数字三角形图案。
        //输入描述：
        //多组输入，一个整数（3~20），表示数字三角形边的长度，即数字的数量，也表示输出行数。
        //输出描述：
        //针对每行输入，输出用数字组成的对应长度的数字三角形，每个数字后面有一个空格。
        //输入：
        //4
        //输出：
        //1
        //1 2
        //1 2 3
        //1 2 3 4
        //输入：
        //5
        //输出：
        //1
        //1 2
        //1 2 3
        //1 2 3 4
        //1 2 3 4 5
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int a = sc.nextInt();
            for (int i = 1; i <= a; i++) {//控制行数
                for (int j = 1; j <= i; j++) {//控制每一行的打印个数
                    System.out.print(j + " ");
                }
                System.out.println();
            }
        }
    }//BC75 数字三角形
}
